package com.nbwyctf.helper.utils;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.time.LocalDateTime;
import java.util.UUID;

/**
 * @author chetaifu
 */
public class JwtUtil {
    /** 进行数字签名的私钥（可以这里写死），一定要保管好 */
    private static final String SECRET_KEY = UUID.randomUUID().toString().replace("-", "");

    public static String createToken(String subject, Object id, String name) {
        LocalDateTime now = LocalDateTime.now();
        return Jwts.builder()
                .signWith(SignatureAlgorithm.HS256, SECRET_KEY)
                .setIssuer("sys")
                .setSubject(subject)
                .claim("id", id)
                .claim("name", name)
                .setIssuedAt(TimeTransformUtil.toDate(now))
                .setExpiration(TimeTransformUtil.toDate(now.plusDays(1)))
                .compact();
    }

//    public static boolean checkToken(String token) {
//        if(Strings.isEmpty(token)){return false;}
//        try {
//            Jwts.parser().setSigningKey(SECRET_KEY).parseClaimsJws(token);
//        } catch (Exception e) {
//            e.printStackTrace();
//            return false;
//        }
//        return true;
//    }
//
//    public static boolean checkToken(HttpServletRequest request) {
//        try {
//            String jwtToken = request.getHeader("token");
//            if(Strings.isEmpty(jwtToken)){return false;}
//            Jwts.parser().setSigningKey(SECRET_KEY).parseClaimsJws(jwtToken);
//        } catch (Exception e) {
//            e.printStackTrace();
//            return false;
//        }
//        return true;
//    }

    /** 私钥解密token信息 */
    public static Claims getClaims(String token) {
        return Jwts.parser()
                .setSigningKey(SECRET_KEY)
                .parseClaimsJws(token)
                .getBody();
    }

    public static String getSubject(String token) {
        return getClaims(token).getSubject();
    }

    public static Object getId(String token) {
        return getClaims(token).get("id");
    }

    public static String getName(String token) {
        return String.valueOf(getClaims(token).get("name"));
    }
}
